import java.util.HashSet;
import java.util.Set;

/**
 * @Description: 在长度 2N 的数组中找出重复 N 次的元素
 * 给你一个整数数组 nums ，该数组具有以下属性：
 * <p>
 * nums.length == 2 * n.
 * nums 包含 n + 1 个 不同的 元素
 * nums 中恰有一个元素重复 n 次
 * 找出并返回重复了 n 次的那个元素。
 * @Date:Create in 15:45  2022/5/21
 */
public class repeatedNTimes0961 {

    public static void main(String[] args) {
        int[] nums = new int[]{1, 2, 3, 3};
        int a = repeatedNTimes3(nums);
        System.out.println(a);
    }

    //暴力解法
    public static int repeatedNTimes1(int[] nums) {
        int signal = 0;

        for (int i = 0; i < nums.length; i++) {
            for (int j = i + 1; j < nums.length; j++) {
                int temp = nums[i] ^ nums[j];
                if (temp == 0) {
                    return nums[i];
                }
            }
        }
        return -1;
    }

    //哈希set     HashSet.add(a) 重复的元素不会被添加
    public static int repeatedNTimes2(int[] nums) {
        Set<Integer> map = new HashSet<Integer>();
        for (int num : nums) {
            if (!map.contains(num)) {
                map.add(num);
            } else {
                return num;
            }
        }
        // 不可能的情况
        return -1;
    }


    //boolean设置默认为false
    public static int repeatedNTimes3(int[] nums) {
        boolean has[] = new boolean[10005];
        for (int i = 0; i < nums.length; i++) {
            if (has[nums[i]]) {
                return nums[i];
            }
            has[nums[i]] = true;
        }
        return -1;
    }


}

